import java.util.HashMap;
import java.util.Arrays;
import java.util.Map;
class Solution {
    public int lenLongestFibSubseq(int[] arr) {
        Map<Integer,Integer> hash=new HashMap<Integer,Integer>();
        int n=arr.length;
        int[][] dp=new int[n][n];
        for(int i=0;i<n;i++){
            hash.put(arr[i],i);
            Arrays.fill(dp[i],2);
        } 
        int ret=2;
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                int tmp=arr[j]-arr[i];
                if(hash.containsKey(tmp)&&hash.get(tmp)<i){
                    dp[i][j]=dp[hash.get(tmp)][i]+1;
                }
                ret=Math.max(ret,dp[i][j]);
            }  
        }  
        return ret<3?0:ret;  
    }
}